[小ネタ]パラメータストアに登録されている値を別アカウントに移行するスクリプト
手動で登録した特定のパラメータストアの値を別アカウントにまとめて移行したいケースがあったので、スクリプトを作成してみました。
作成したスクリプト
移行元と移行先で実行するスクリプトを分けています。
エクスポートスクリプト
移行元で実行するスクリプトです。parameters.txt
を出力します。
移行対象を絞るため、/test
の名前から始まるものに絞ってるので、任意の文字列に置き換えてください。
prefix="/test" # 移行対象のプレフィックスに変更 parameters=$(aws ssm describe-parameters --query "Parameters[?starts_with(Name,'$prefix')].Name" --output text) for parameter in $parameters; do param_info=$(aws ssm get-parameter --name "$parameter" --with-decryption) value=$(echo $param_info | jq -r ".Parameter.Value") type=$(echo $param_info | jq -r ".Parameter.Type") echo "$parameter:$type:$value" >> parameters.txt done
インポートスクリプト
移行先で実行するスクリプトです。エクスポートスクリプトで出力したparameters.txt
をもとにパラメーターストアに登録します。
while IFS=":" read -r parameter type value; do aws ssm put-parameter --name "$parameter" --type "$type" --value "$value" --overwrite done < parameters.txt
やってみる
実際に作ったスクリプトを使ってみます。今回はCloudShellでやってみました。
移行元のアカウントにサンプルで以下のようなパラメータを用意しています。
移行元アカウント
移行元のアカウントへログインしてください。
CloudShellを開いて以下スクリプトを貼り付けて実行します。
prefix="/test" # 移行対象のプレフィックスに変更 parameters=$(aws ssm describe-parameters --query "Parameters[?starts_with(Name,'$prefix')].Name" --output text) for parameter in $parameters; do param_info=$(aws ssm get-parameter --name "$parameter" --with-decryption) value=$(echo $param_info | jq -r ".Parameter.Value") type=$(echo $param_info | jq -r ".Parameter.Type") echo "$parameter:$type:$value" >> parameters.txt done
完了すると、直下のフォルダにparameters.txt
というファイルが出力されます。
CloudShell上からファイルをダウンロードするためには、右上から アクション > ファイルのダウンロード をクリックします。
ファイルのダウンロード画面が出るので、parameters.txt
と入力してダウンロードします。
ダウンロードできたら移行元のアカウント作業は完了です。
ダウンロードしたparameters.txt
にはパラメータ名、種類、値が:
区切りで出力されます。
今回は以下のような形で出力されていました。
/test/AAA:String:AAA /test/BBB:StringList:[B,B,B] /test/CCC:SecureString:/test/CCC
移行先アカウント
移行先のアカウントへログインします。
CloudShellを開いて先ほどダウンロードしたファイルをアップロードします。 ダウンロードの時と同じですが、CloudShell上にファイルをアップロードするためには、右上から アクション > ファイルのアップロード をクリックします。
アップロードに成功したら、移行先スクリプトを貼り付けて実行します。
while IFS=":" read -r parameter type value; do aws ssm put-parameter --name "$parameter" --type "$type" --value "$value" --overwrite done < parameters.txt
エラーが出なければ成功してるので、実際にパラメータストアを見てみます。
移行元で登録されていた状態と同じように登録することができていますね。
注意点
String
、StringList
、SecureString
それぞれ移行できますが、SecureStringでデフォルトのKMSキー以外を使っている場合は動作確認してません。おそらく移行先ではデフォルトのKMSキーで登録されるので注意してください。
最後に
最初SDKで1つのスクリプトにして実装しようと思ってたんですが、分けた方が汎用性高そうだなと思ったのでコマンドにしました。 誰かの作業を少しでも楽にできれば嬉しいです。